#include"RingBuffer.hpp"
#include<unistd.h>

using namespace RingBufferModule;

void* Consumer(void* args)
{
    RingBuffer<int>* ring_buffer = reinterpret_cast<RingBuffer<int>*>(args);
    while(true)
    {
        sleep(1);
        //1. 消费数据
        int data;
        ring_buffer->Pop(&data);

        //2. 处理数据，花费时间
        printf("消费者,消费了一个数据:%d\n",data);
       
    }
}

void* Productor(void* args)
{
    RingBuffer<int>* ring_buffer = reinterpret_cast<RingBuffer<int>*>(args);
    int data = 1;
    while(true)
    {   
        //1.获取数据，花费时间

        //2. 生产数据
        ring_buffer->Push(data);
        printf("生产者,生产了一个数据:%d\n",data);
        data++;
    }
}

int main()
{
    RingBuffer<int>* ring_buffer = new RingBuffer<int>();
    pthread_t tid1,tid2;
    pthread_t tid3,tid4,tid5,tid6;

    pthread_create(&tid1,nullptr,Consumer,ring_buffer);
    pthread_create(&tid2,nullptr,Productor,ring_buffer);

    pthread_create(&tid3,nullptr,Consumer,ring_buffer);
    pthread_create(&tid4,nullptr,Consumer,ring_buffer);
    pthread_create(&tid5,nullptr,Productor,ring_buffer);
    pthread_create(&tid6,nullptr,Productor,ring_buffer);


    pthread_join(tid1,nullptr);
    pthread_join(tid2,nullptr);

    pthread_join(tid3,nullptr);
    pthread_join(tid4,nullptr);
    pthread_join(tid5,nullptr);
    pthread_join(tid6,nullptr);
    return 0;
}